<template>
  <input
    class="ipt"
    type="text"
    @input="handler"
    @blur="handlerinput"
    :class="{ primary: flag, danger: !flag }"
  />
</template>

<script>
export default {
  props: {
    rule: {
      // RegExp:正则表达式的类型
      type: RegExp,
    },
  },
  data() {
    return {
      flag: true,
    };
  },
  methods: {
    handler(e) {
      let v = e.target.value;
      this.$emit("input", v);
      // console.log(e.target.value);

      // 正则表达式
      // 根据用户传递的规则进行数据验证
      if (this.rule) {
        // 说明传递了验证规则
        // 进行验证
        // test是正则的验证方法，返回bool值
        if (this.rule.test(v)) {
          this.flag = true;
        } else {
          this.flag = false;
        }
      }
    },
    //文本框改变
    handlerinput(e) {
      this.$emit("blur");
    },
  },
};
</script>

<style lang="less" scoped>
.ipt {
  // vw是视口宽度
  width: 318 * 100vw/375;
  height: 50px;
  line-height: 50px;
  outline: none;
  border: none;
  border-bottom: 2px solid #ccc;
}
.primary {
  border-bottom: 2px solid#0a0;
}
.danger {
  border-bottom: 2px solid red;
}
</style>